//
// Created by Administrator on 2021/10/13.
//

#ifndef MRENDER_HELLOASSERT_H
#define MRENDER_HELLOASSERT_H
#include "MBaseException.h"

class MAssert{
public:
    /**
     * 判断空指针,如果指针为空，返回true,如果指针不为空，返回false
     * @param p 指针变量
     * @return 指针是否为空
     */
    static bool isNull(void * p) {
        return nullptr == p || !p;
    }

    /**
     * 断言空指针，如果指针为空，抛出异常
     * @param p 指针变量
     */
    static void check(void * p) {
        check(p != nullptr, "Null Pointer.");
    }

    /**
     * 断言空指针，如果指针为空，抛出异常
     * @param p 指针变量
     */
    static void check(void * p, const char* msg) {
        check(p != nullptr, msg);
    }

    /**
     * 断言，如果为faslse,抛出异常
     * @param ex 表达式
     */
    static void check(bool ex) {
        check(ex, "");
    }

    /**
     * 断言并抛出异常
     * @param ex 表达式
     * @param msg 异常说明
     */
    static void check(bool ex, const char* msg) {
        if(!ex) throw MBaseException(msg);
    }
};

#endif //MRENDER_HELLOASSERT_H
